header {
package com.cea.papyrus.classdiagram.parsers.antlr;
}

/* #################################################
   ###                  LEXER                    ###
   #################################################
*/
class VSLLexer extends Lexer;

options {
	k =6;
	importVocab = VSL;  // Telling the export language is VSL
	testLiterals=false;    // don't automatically test for literals
	charVocabulary='\u0003'..'\uFFFF';
}

// OPERATORS
QUESTION		:	'?'		;
LPAREN			:	'('		;
RPAREN			:	')'		;
LBRACK			:	'['		;
RBRACK			:	']'		;
LCURLY			:	'{'		;
RCURLY			:	'}'		;
COLON			:	':'		;
COMMA			:	','		;
ASSIGN			:	'='		;
EQUAL			:	"=="	;
LNOT			:	'!'		;
BNOT			:	'~'		;
NOT_EQUAL		:	"!="	;
DIV				:	'/'		;
DIV_ASSIGN		:	"/="	;
PLUS			:	'+'		;
PLUS_ASSIGN		:	"+="	;
INC				:	"++"	;
MINUS			:	'-'		;
MINUS_ASSIGN	:	"-="	;
DEC				:	"--"	;
STAR			:	'*'		;
STAR_ASSIGN		:	"*="	;
MOD				:	'%'		;
MOD_ASSIGN		:	"%="	;
SR				:	">>"	;
SR_ASSIGN		:	">>="	;
BSR				:	">>>"	;
BSR_ASSIGN		:	">>>="	;
GE				:	">="	;
GT				:	">"		;
SL				:	"<<"	;
SL_ASSIGN		:	"<<="	;
LE				:	"<="	;
LT				:	'<'		;
BXOR			:	'^'		;
BXOR_ASSIGN		:	"^="	;
BOR				:	'|'		;
BOR_ASSIGN		:	"|="	;
LOR				:	"||"	;
BAND			:	'&'		;
BAND_ASSIGN		:	"&="	;
LAND			:	"&&"	;
SEMI			:	';'		;
QUOTE 			:	'\''	;
SHARP			:	'#'		;
DIFF			:	"<>"	;




// literals
EXPONENT 		:  	("e+"|"E+"|"e-"|"E-");
DECIMAL_STRING	:	('0'..'9')+;
BINARY_STRING	:	"0b" ('0' | '1')+ ;
HEXADECIMAL_STRING :	"0x" (('0'..'9') | ('A'..'F') | ('a'..'f'))+ ;

// boolean literal
TRUE			: 	"true"	;
FALSE			: 	"false"	;

// null literal 
NULL			:	"null"	;

// dot
DOT				:	'.';
DOTDOT			:	"..";



// string literal
STRING_TEXT		:	QUOTE (SAFEUTF8CHAR)*	QUOTE;


// UTF-8 character set
protected SAFEUTF8CHAR:
    '\u0001'..'\u0021' |
    '\u0023'..'\u007F' |
    '\u00c0'..'\u00d6' |
    '\u00d8'..'\u00f6' |
    '\u00f8'..'\u00ff' |
    '\u0100'..'\u1fff' |
    '\u3040'..'\u318f' |
    '\u3300'..'\u337f' |
    '\u3400'..'\u3d2d' |
    '\u4e00'..'\u9fff' |
    '\uf900'..'\ufaff' ;

    
IDENT			:	('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*;

